package module

import (
	"net"
	"regexp"
	"strings"
)

// isValidIP 检查IP地址是否有效，支持IPv4和IPv6
func isValidIP(ip string) bool {
	return net.ParseIP(ip) != nil
}

// isValidHostname 检查域名是否有效
// 支持标准域名、localhost、主机名等格式
func isValidHostname(hostname string) bool {
	// 特殊处理localhost
	if hostname == "localhost" {
		return true
	}

	// 特殊处理localhost的IPv6形式
	if hostname == "localhost.localdomain" {
		return true
	}

	// 特殊处理localhost的变体
	if strings.HasPrefix(hostname, "localhost.") {
		return true
	}

	// 处理简单的主机名（不包含点）
	if !strings.Contains(hostname, ".") {
		// 主机名只能包含字母、数字、连字符，且不能以连字符开头或结尾
		simpleHostnameRe := regexp.MustCompile(`^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$`)
		return simpleHostnameRe.MatchString(hostname)
	}

	// 标准域名格式检查
	// 支持更宽松的域名格式，包括国际化域名前的xn--前缀
	hostnameRe := regexp.MustCompile(`^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$`)
	return hostnameRe.MatchString(hostname)
}
